The present invention relates to instrumentation of software performance, in particular real-time, embedded or multi-tasking software running on a target computer being monitored by a separate, host computer. As used herein, target and host computer could refer to target and host programs or suites of programs running on a single computer.
There are many applications where software needs to exert real-time control. Examples of this are control systems for aircraft, factories, automobiles, printers, broker transaction computers, etc. A typical implementation would have a dedicated target computer which controls the aircraft, factory, etc., with target software on the target computer. This computer could be uplinked via a TCP-IP ethernet link, linked, networked or otherwise connected to a host computer. This could be a Unix.RTM.-based workstation or a Windows.RTM.-based PC, for example. The host can be used to download and configure the software which will run on the target computer, and customize such software.
Today's tools for developing complex real-time and embedded target applications are inadequate. They have two main deficiencies. First, the tools do not provide enough visibility into the target application under development. Second, the access and presentation of what information the tools do provide is clumsy and crude.
The problem of application visibility is that a developer needs powerful tools for exploring the construction and execution of complex applications. Although tools such as source browsers and cross-references are increasingly available for exploring the static construction of a target application, there are still only primitive facilities for obtaining dynamic information about the actual execution of the application. For example, it is not unusual to be able to obtain snapshots of the state of various pieces of the system. However, there are not many tools which capture and present sequence or timing information, or interactions between components in the system. This dynamic is precisely the information which is critical in real-time systems.
The problem of presentation is that the interface to the limited information which is available is tedious and low-bandwidth. A user may need to repeatedly type commands, remember and type names and numeric identifiers, display lists with large numbers of names and numbers which must then be deciphered, etc. A user would have trouble displaying different pieces of relevant information simultaneously, as the results of previous commands scroll off the top of the display. When a target application has dozens of tasks, hundreds of semaphores, message queues, timers, etc., the inadequacy of such an interface is clear.
The architecture of typical target computers, among other things, prohibits an easy solution. Development tools are generally resident in the target computer. However, the memory of the target computer is often limited, and the tool developer is constrained by considerations of program size and memory utilization. GUI-based tools are particularly difficult.
It would be useful to be able to use the host computer to increase the visibility of the target application by monitoring what is happening in real-time on the target computer, especially for debugging and benchmarking purposes. Because the target computer is performing a real-time function, any such monitoring should minimize the intrusion on the target computer software. In addition, it is desirable to minimize the amount of data which needs to be uploaded. Uploading extensive amounts of data can also interfere with the control of the software. Finally, it would be desirable to significantly increase the accessibility and presentation of the monitored information by displaying such information in a manner which is easily grasped and usable by a user, such as a technician performing maintenance on or monitoring or debugging the target software.
Systems have been proposed which show in graphical form which of multiple tasks are performing at different times, such as through the use of a bar graph which indicates by the bar which task or program is running. An example of such a system is the Arts real-time scheduler analyzer/debugger from Carnegie Mellon University.